package com.hhc.thread;

import java.util.concurrent.*;

public class T {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newCachedThreadPool();

        // 提交大量任务
        for(int i=0 ; i<Integer.MAX_VALUE; i++){
            executor.submit(()->{
                // 模拟长时间运行的任务
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
                // ... 执行任务的逻辑
            });
        }
        // executor.shutdown();
    }

    public static void main1(String[] args) {
        int corePoolSize = 5;  //核心线程数
        int maximumPoolSize = 10;  //最大线程数
        long keepAliveTime = 60L;  // 空闲线程等待新任务的最长时间
        TimeUnit unit = TimeUnit.SECONDS; // 时间单位
        int workQueueSize = 20; // 队列容量
        RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy(); // 拒绝策略
        ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(workQueueSize);

        ThreadPoolExecutor executor = new ThreadPoolExecutor(
                corePoolSize,
                maximumPoolSize,
                keepAliveTime,
                unit,
                workQueue,
                handler
        );

        // 提交任务
        for(int i=0;i<50;i++){
            executor.submit(()->{
                // 执行任务逻辑
            });
        }

        // 关闭线程池
        executor.shutdown(); // 不再接受新任务，等待已执行任务执行完毕
        // 如果想立即停止所有正在执行的任务，并返回等待执行的任务列表，可以使用executor.shutdownNow();
    }
}
